package com.acme.bankapp.domain.accounting;

import com.acme.bankapp.domain.Client;

public interface Account {

	/**
	 * Get current account balance
	 * 
	 * @return account balance
	 */
	double getBalance();

	/**
	 * Add to balance
	 * 
	 * @param x
	 *            amount to add
	 */
	void deposit(double x);

	/**
	 * Remove from balance
	 * 
	 * @param x
	 *            amount to remove
	 * @throws LowBalanceException
	 *             Domain exception, while x greater than available balance
	 */
	void withdraw(double x) throws NotEnoughFundsException;

	/**
	 * Max available amount to withdraw
	 * 
	 * @return amount
	 */
	double maximumAmountToWithdraw();
	
	/**
	 * set client to identify account
	 * @param client account owner
	 */
	void setClient(Client client);
	
	/**
	 * get owner of account
	 * @return owner
	 */
	Client getClient();
}
